#!/usr/bin/env bash

set -ve

export LFS='/mnt/lfs'
export SCRIPT_PATH=$(cd $(dirname $0); pwd)

#####################################################################
# Binutils 软件包包含一个链接器、一个汇编器、以及其它处理目标文件的工具。
# 1 SBU, 580M
#####################################################################
time bash $SCRIPT_PATH/005.build.001.binutils.sh

#####################################################################
# GCC 软件包包括 GNU 编译器集，其中有 C 和 C++ 的编译器。
# 11 SBU, 2.9G
#####################################################################
time bash $SCRIPT_PATH/005.build.002.gcc.sh

#####################################################################
# Linux API 1头文件（在 linux-4.20.12.tar.xz 里）会将内核 API 导出给 Glibc 使用。
# 0.1 SBU, 937M
#####################################################################
time bash $SCRIPT_PATH/005.build.003.linux-api.sh

#####################################################################
# Glibc 软件包包含了主要的 C 函数库。这个库提供了分配内存、搜索目录、打开关闭文件、读写文件、操作字符串、模式匹配、基础算法等基本程序。
# 5.1 SBU, 885M
#####################################################################
time bash $SCRIPT_PATH/005.build.004.glibc.sh

#####################################################################
# Libstdc++ 是标准的 C++ 库。需要用它来编译 C++ 代码（GCC 的一部分是用 C++ 写的），但是在构建 gcc-第 1 遍 时，我们需要推迟它的安装进程，因为依赖的 glibc，还未部署在 /tools 目录中。
# Libstdc++ 是标准的 C++ 库。g++ 编译器正确运行需要它。
# 0.5 SBU, 803M
#####################################################################
time bash $SCRIPT_PATH/005.build.005.gcc-libstdc++.sh

#####################################################################
# Binutils 软件包包含一个链接器、一个汇编器、以及其它处理目标文件的工具。
# 1.1 SBU, 598M
#####################################################################
time bash $SCRIPT_PATH/005.build.006.binutils.sh

#####################################################################
# GCC 软件包包括 GNU 编译器集，其中有 C 和 C++ 的编译器。
# 14 SBU, 3.4G
#####################################################################
time bash $SCRIPT_PATH/005.build.007.gcc.sh

#####################################################################
# Tcl 语言（最小化安装版本）
# 内容：
#     tclsh8.6          Tcl 命令终端
#     tclsh             软链接到 tclsh8.6
#     libtcl8.6.so      Tcl 库
#     libtclstub8.6.a   Tcl Stub 库
# 0.9 SBU, 66M
#####################################################################
time bash $SCRIPT_PATH/005.build.008.tcl.sh

#####################################################################
# Expect
# 内容：
#     expect            基于脚本和其他交互式程序通信。
#     libexpect-5.45.so 包含一些函数允许 Expect 用作 Tcl 扩展或直接用于 C/C++（不用 Tcl）。
# 0.1 SBU, 3.9M
#####################################################################
time bash $SCRIPT_PATH/005.build.009.expect.sh

#####################################################################
# DejaGNU：测试其他程序的框架，似乎依赖 expect 和 tcl。
# 内容：
#     runtest
# 少于 0.1 SBU, 3.2M
#####################################################################
time bash $SCRIPT_PATH/005.build.010.dejagnu.sh

#####################################################################
# M4 软件包包含一个宏处理器。
# 0.2 SBU, 20M
#####################################################################
time bash $SCRIPT_PATH/005.build.011.m4.sh

#####################################################################
# Ncurses 软件包包含用于不依赖于特定终端的字符屏幕处理的库。
# 0.6 SBU, 41M
#####################################################################
time bash $SCRIPT_PATH/005.build.012.ncurses.sh

#####################################################################
# Bash
# 0.4 SBU, 67M
#####################################################################
time bash $SCRIPT_PATH/005.build.013.bash.sh

#####################################################################
# Bison 软件包包含一个语法生成器。
# 0.3 SBU, 37M
#####################################################################
time bash $SCRIPT_PATH/005.build.014.bison.sh

#####################################################################
# Bzip2
# 少于 0.1 SBU, 5.5M
#####################################################################
time bash $SCRIPT_PATH/005.build.015.bzip2.sh

#####################################################################
# Coreutils 软件包包含用于显示和设置基本系统特性的工具。
# 0.8 SBU, 148M
#####################################################################
time bash $SCRIPT_PATH/005.build.016.coreutils.sh

#####################################################################
# Diffutils 软件包包含显示文件和目录差异的程序。
# 0.2 SBU, 26M
#####################################################################
time bash $SCRIPT_PATH/005.build.017.diffutils.sh

#####################################################################
# File 软件包包括一个判断给定的某个或某些文件文件类型的工具。
# 0.1 SBU, 18MB
#####################################################################
time bash $SCRIPT_PATH/005.build.018.file.sh

#####################################################################
# Findutils 软件包包含查找文件的程序。
# 0.3 SBU, 36M
#####################################################################
time bash $SCRIPT_PATH/005.build.019.findutils.sh

#####################################################################
# Gawk 软件包包含用于操作文本文件的程序。
# 0.2 SBU, 43M
#####################################################################
time bash $SCRIPT_PATH/005.build.020.gawk.sh

#####################################################################
# Gettext 软件包包含用于国际化和本土化的工具。
# 0.9 SBU, 173M
#####################################################################
time bash $SCRIPT_PATH/005.build.021.gettext.sh

#####################################################################
# Grep
# 0.2 SBU, 24M
#####################################################################
time bash $SCRIPT_PATH/005.build.022.grep.sh

#####################################################################
# Gzip
# 0.1 SBU, 10M
#####################################################################
time bash $SCRIPT_PATH/005.build.023.gzip.sh

#####################################################################
# Make 软件包包含一个用于编译软件的程序。
# 0.1 SBU, 13M
#####################################################################
time bash $SCRIPT_PATH/005.build.024.make.sh

#####################################################################
# Patch 软件包包含一个通过打「补丁」创建或修改文件的程序，补丁文件通常由 diff 程序生成。
# 0.2 SBU, 12M
#####################################################################
time bash $SCRIPT_PATH/005.build.025.patch.sh

#####################################################################
# Perl 语言
# 1.6 SBU, 275M
#####################################################################
time bash $SCRIPT_PATH/005.build.026.perl.sh

#####################################################################
# Python 语言
# 1.5 SBU, 371M
#####################################################################
time bash $SCRIPT_PATH/005.build.027.python.sh

#####################################################################
# Sed 流编辑器
# 0.2 SBU, 20M
#####################################################################
time bash $SCRIPT_PATH/005.build.028.sed.sh

#####################################################################
# Tar 归档程序
# 0.3 SBU, 38M
#####################################################################
time bash $SCRIPT_PATH/005.build.029.tar.sh

#####################################################################
# Texinfo 软件包包含用于读、写以及转换信息页的程序。
# 0.3 SBU, 104M
#####################################################################
time bash $SCRIPT_PATH/005.build.030.texinfo.sh

#####################################################################
# Xz
# 0.2 SBU, 18M
#####################################################################
time bash $SCRIPT_PATH/005.build.031.xz.sh

#####################################################################
# 1. 删除不需要的调试符号（大概 70MB 左右）
strip --strip-debug /tools/lib/*
/usr/bin/strip --strip-unneeded /tools/{,s}bin/*
# 2. 删除帮助文档
rm -rf /tools/{,share}/{info,man,doc}
# 3. 删除不需要的文件
find /tools/{lib,libexec} -name \*.la -delete
#####################################################################
######################### 005.build.sh OVER #########################
#####################################################################
